package basicGrammar;

/*
    1.关键字和保留字
      关键字：语言当中有特殊含义的单词,都是小写的
      保留字：也是语言中定义出来的关键字，但是目前还没有特殊含义，可能在未来的版本中赋予特殊含义
    2.标识符
      编程就需要起名，我们起的名字就叫做标识符
      标识符有命名规则：
        1) 不能是关键字或保留字
        2) 可以包含字母，下划线(_)，美元符号($)，数字(不能以数字开头)
        3) 不允许有特殊字符(+ = ^ % 等等)
        4) 区分大小写，对大小写敏感
        5) 长度没有限制
        6) 名字尽量有含义,不要使用拼音,也不要英文和拼音混用，除特殊单词以外
        7) 驼峰式命名(约定俗成)：首字母是小写，后面的每个单词的首字母大写
        8) 类名首字母要大写
 */
public class Demo2_DataType {

    /*
        变量
            在java语言中可以变化的量
            可以做一些临时的存储，温度=30.8 身高=180 体重=100
          语法：
            数据类型 变量名(标识符) = 初始值;
          注意：
            必须有数据类型且初始值必须是当前类型的值
            变量必须先定义后使用
            变量不能重复定义
     */

    public static void main(String[] args){

        /*
            数据类型：
              引用数据类型
                不展开说，后续涉及面向对象
              基本数据类型(8个)
                整型(整数)：byte short int long
                浮点型(小数)：float double
                布尔：boolean
                字符：char

            数据类型        占用字节数       取值范围
            byte            1字节(8位)     -128 ~ 127
            short           2字节(16位)    -32768 ~ 32767
            int             4字节(32位)    -2147483648 ~ 2147483647
            long            8字节(64位)    -9223372036854775808 ~ 9223372036854775807
            float           4字节(32位)
            double          8字节(64位)

            注意：
                字面量如果是整数的时候，java 会将它编译成 int 类型
                如果是小数，java会将它编译成 double 类型
                如果想明确标识字面量的类型，可以加上一个标识符
                  float f = 3.14F / 3.14f
                  double d = 3.14D / 3.14d  没有必要
                  long l = 12345L / 12345l  定义变量时没有必要

            类型转换
              小转大
                不涉及数据丢失问题，可以自动转换
                byte->short->int->long->float->double
              大转小
                精度高的类型到精度低的类型可能会出现数据存不下的问题
                java不允许直接转换
                如果一定要转换，通过强制转换的方式实现
                  低精度类型 low = (低精度类型)高精度类型;
              char 和 int
                char 可以直接接收一个数字,但不可以接收int类型的值
                int 也可以直接接收一个字符

            字符编码
             对任意一个字符(数字，字母，汉字，韩文，日文等等)，有一个唯一的数字(二进制)与其对应
             这个过程就是对字符进行编码

             ASCII
                只用一个字节进行编码，最多只有 8 位，能编入的字符非常有限
                ASCII能编入的只有英文字母 数字 和一些符号
             GBK / GB2312 / GB18030
                为了中文开发出的编码格式，采取了增加字节的方式
                完全兼容ASCII码，不足的位补0就ok
                日语和韩语等其他国家语言也有自己相应的编码
             Unicode
                整合了所有国家语言的一种编码
             UTF-8
                一种可变长度的编码，尽可能的让每个字符都占用最少的空间
                英文一般是1个字节，汉字通常是3字节，生僻字4-6字节
         */

        /*
            进制：
                十进制：遇到 10,进一位
                  包含 0-9 数字
                二进制：遇到 2，进一位
                  包含 0 和 1
                八进制：遇到 8，进一位
                  包含 0 - 7
                十六进制：遇到 16，进一位
                  包含 0-9 和 A-F
            进位：
               1字节(byte) = 8位(bit)
               1KB = 1024byte
               1MB = 1024KB
               1GB = 1024MB
               1TB = 1024GB
               1PB = 1024TB
               1ZB = 1024PB
         */

        byte b = 127;
        short s = 122;
        int shortToInt = s;
        double shortToDouble = s;
//        System.out.println(shortToInt);

        byte shortToByte = (byte)s;
//        System.out.println(shortToByte);

        int salary = 1000000;

        long l = 11111L;

        float f = 3.14F;
        double d = 3.14;

        boolean boo = true;
        boolean boo1 = false;

        int c = 'A';
        char num = 97-26;
        System.out.println(c);



    }
}
